package org.example;

import net.e175.klaus.solarpositioning.AzimuthZenithAngle;
import net.e175.klaus.solarpositioning.DeltaT;
import net.e175.klaus.solarpositioning.SPA;

import java.time.*;

/**
 * ClassName: ${NAME}
 * Package: org.example
 * Description:
 *
 * @Author BuTang
 * @Create ${DATE} ${TIME}
 * @Version 1.0
 */
public class SpaUtils {

    /**
     * 使用的库 solarpositioning-0.1.10.jar
     * @param localDateTime 需要计算太阳高度角的时间
     * @param zoneId 时区 举例：东八区为ZoneOffset.ofHours(8) / ZoneId.of("Asia/Shanghai");
     * @param latitude 纬度（角度制）
     * @param longitude 经度（角度制）
     * @param elevation 海拔高度 （m）
     * @param pressure 年平均压力 单位为：millibars (or hectopascals) 若不确定，则填1000较为合理
     * @param temperature 年平均温度 单位 摄氏度
     * @return 返回结果中 getAzimuth 获取方位角（角度制）， getZenithAngle 获取天顶角 （角度制）
     *          注释：天顶角和高度叫互余（即天顶角+方位角=90°）
     *
     *  这里使用的是 https://dev.qweather.com/ 免费的api
     *  key为 95569e2830c54729b26a4734d61c5094
     */
    public static AzimuthZenithAngle getAzimuthAndZenithAngle(LocalDateTime localDateTime, ZoneId zoneId, double latitude, double longitude , double elevation , double pressure , double temperature) throws Exception {

        /**
         * 暂时不需要实时气温/气压
         */
//        //创建http请求
//        CloseableHttpClient httpClient = HttpClients.createDefault();
//        HttpGet httpGet = new HttpGet("https://devapi.qweather.com/v7/weather/now?"+"location="+longitude+","+latitude+"&key=95569e2830c54729b26a4734d61c5094");
//        CloseableHttpResponse response = httpClient.execute(httpGet);
//        log.info("http请求为：{}",httpGet.toString());
//        //获取状态码
//        int statusCode = response.getStatusLine().getStatusCode();
//        log.info("请求状态为：{}",statusCode);
//        HttpEntity entity = response.getEntity();
//
//        String entityString = EntityUtils.toString(entity);
//        JSONObject data = JSONObject.parseObject(entityString);
//
//        WeatherResponceEntity weatherResponceEntity = new WeatherResponceEntity();
//        weatherResponceEntity = JSONArray.parseObject(data.toJSONString(),WeatherResponceEntity.class);
//        String weatherData = data.getString("now");
//        log.info("实时压力为：{}",weatherResponceEntity.getNow().getPressure());
//        log.info("实时温度为：{}",weatherResponceEntity.getNow().getTemp() );
//        System.out.println();

        ZonedDateTime time = ZonedDateTime.of(localDateTime.getYear(), localDateTime.getMonthValue(), localDateTime.getDayOfMonth(),localDateTime.getHour() , localDateTime.getMinute(), localDateTime.getSecond(), localDateTime.getNano(), zoneId);

//        log.info("开始计算太阳高度角与方位角");

        //计算deltaT
        double deltaT = DeltaT.estimate(LocalDate.from(localDateTime));
        //计算太阳位置
        AzimuthZenithAngle result = SPA.calculateSolarPosition(time, latitude, longitude, elevation, deltaT,pressure, temperature);

//        AzimuthZenithAngle result = SPA.calculateSolarPosition(time, latitude, longitude, elevation, deltaT, pressure, temperature);

//        //获取天顶角和方位角
//        double azimuth = result.getAzimuth();
//        double zenithAngle = result.getZenithAngle();
//        log.info("时间的时间节点为：{}",time);
//        log.info("高度角为：{}",(90-zenithAngle));
//        log.info("方位角为：{}",azimuth);
        return result;
    }




}